<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"/>
    <title>新的模板</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<!--
        Vue监视数据的原理：
                1.vue会监视data中所有的数据

                2.如何监测对象中的数据
                        通过setter实现监视，切要在new Vue时传入要监测的数据
                                1）对象中后追加的属性, Vue默认不做响应式处理
                                2）如需给后添加的属性做响应式，请使用如下API：
                                        Vue.set(target, propertyName/index, value) 或
                                        vm.$set(target, propertyName/index, value)

               3.如何监测数组中的数据
                        通过包囊数组更新元素的方法实现，本质就是做了两件事：
                                1）调用原生对应的方法对数据进行更新
                                2）重新解析模板，进而更新页面

               4.在Vue修改数组中的某个元素一定要用如下方法：
                        1.使用这些API：push()、pop()、shift()、unshift()、splice()、sort()、reverse()
                        2.Vue.set() 或者 vm.$set()

               特别注意：Vue.set() 和 vm.$set()不能给vm 或 vm的根数据对象添加属性！！！
-->

<!-- 准备好一个容器 -->
<div id="root">
    <h1>学生信息</h1>
    <button @click="student.age++">年龄+1岁</button>
    <br/>
    <button @click="addSex">添加性别属性，默认是男</button>
    <br/>
    <button @click.once="addFriend">在列表首位添加一个朋友</button>
    <br/>
    <button @click="updateFirstFriendName">修改第一个朋友名字为：张三</button>
    <br/>
    <button @click="addHobby">添加个爱好</button>
    <br/>
    <button @click="updateFirstHobby">修改第一个爱好为：开车</button>
    <br/>

    <h2>名称：{{student.name}}</h2>
    <h2 v-if="student.sex">性别：{{student.sex}}</h2>
    <h2>年龄：真实{{student.age.rAge}}, 对外{{student.age.sAge}}</h2>
    <h2>爱好</h2>
    <ul>
        <li v-for="h, index in student.hobby" :key="index">
            {{h}}
        </li>
    </ul>
    <h2>朋友们</h2>
    <ul>
        <li v-for="f, index in student.friends" :key="f.name">
            {{f.name}}--{{f.age}}
        </li>
    </ul>
</div>

<script type="text/javascript">
    Vue.config.productionTip = false;// 阻止 vue 在启动时生成生产提示。

    const vm = new Vue({
        el: '#root',
        data: {
            student: {
                name: 'tom',
                age: {
                    rAge: 40,
                    sAge: 29
                },
                hobby: ['抽烟', '喝酒', '烫头'],
                friends: [
                    {name: 'jerry', age: 35},
                    {name: 'tony', age: 55}
                ]
            }
        },
        methods: {
            addSex() {
                this.$set(this.student, 'sex', '男')
            },
            addFriend() {
                this.student.friends.unshift({name: 'jack', age: 66})
            },
            updateFirstFriendName() {
                this.student.friends[0].name = '张三'
                this.student.friends[0].age = '15'
            },
            addHobby() {
                this.student.hobby.push('打牌')
            },
            updateFirstHobby() {
                // this.student.hobby.splice(0,1, '开车')
                this.$set(this.student.hobby, 0, '开车')
            }
        }
    })
</script>
</body>
</html>
